//#include <stdio.h>
//#include <stdbool.h>
//
//#define MAX_N 100
//#define MAX_M 100
//
//typedef struct {
//    int x, y;
//} Point;
//
//Point queue[MAX_N * MAX_M];
//int front, rear;
//
//char grid[MAX_N][MAX_M + 1];
//bool visited[MAX_N][MAX_M];
//
//int directions[4][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
//
//void enqueue(int x, int y) {
//    queue[rear].x = x;
//    queue[rear].y = y;
//    rear++;
//}
//
//Point dequeue() {
//    return queue[front++];
//}
//
//bool isEmpty() {
//    return front == rear;
//}
//
//int main() {
//    int n, m;
//    scanf_s("%d %d", &n, &m);
//    for (int i = 0; i < n; i++) {
//        scanf_s("%s", grid[i]);
//    }
//
//    for (int i = 0; i < n; i++) {
//        for (int j = 0; j < m; j++) {
//            visited[i][j] = false;
//        }
//    }
//
//    front = rear = 0;
//    if (grid[0][0] == '.') {
//        enqueue(0, 0);
//        visited[0][0] = true;
//    }
//
//    while (!isEmpty()) {
//        Point current = dequeue();
//        if (current.x == n - 1 && current.y == m - 1) {
//            printf("Yes\n");
//            return 0;
//        }
//        for (int i = 0; i < 4; i++) {
//            int nx = current.x + directions[i][0];
//            int ny = current.y + directions[i][1];
//            if (nx >= 0 && nx < n && ny >= 0 && ny < m && grid[nx][ny] == '.' && !visited[nx][ny]) {
//                visited[nx][ny] = true;
//                enqueue(nx, ny);
//            }
//        }
//    }
//
//    printf("No\n");
//    return 0;
//}

#include <stdio.h>

#define MAX_N 100
#define MAX_M 100

char grid[MAX_N][MAX_M + 1];
int n, m;

void dfs(int i, int j) {
    if (i < 0 || i >= n || j < 0 || j >= m || grid[i][j] != 'W') {
        return;
    }
    grid[i][j] = '.';
    for (int dx = -1; dx <= 1; dx++) {
        for (int dy = -1; dy <= 1; dy++) {
            if (dx == 0 && dy == 0) continue;
            dfs(i + dx, j + dy);
        }
    }
}

int main() {
    scanf_s("%d %d", &n, &m);
    for (int i = 0; i < n; i++) {
        scanf_s("%s", grid[i]);
    }

    int count = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (grid[i][j] == 'W') {
                dfs(i, j);
                count++;
            }
        }
    }

    printf("%d\n", count);
    return 0;
}